package cc.facesign.admin.service;

import cc.facesign.admin.bean.TblUser;
import cc.facesign.admin.bean.query.UserQuery;
import cc.facesign.admin.bean.vo.AddUserVo;
import cc.facesign.admin.bean.vo.ConfVo;
import cc.facesign.admin.bean.vo.DeptVo;
import cc.facesign.admin.bean.vo.UserVo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author testjava
 * @since 2022-05-06
 */
public interface TblUserService extends IService<TblUser> {

    /**
     * 根据userId查出所属根部门id
     * @param id
     * @return
     */
    String getRootDetpIdByUserId(String id);

    /**
     * 获取当前登录状态下的用户信息
     * @return
     */
    TblUser getCurrent();

    /**
     * 获取用户vo信息
     * @param id 用户id
     * @return
     */
    UserVo getInfoById(String id);

    /**
     * 批量获取用户vo
     * @return
     */
    List<UserVo> getInfoByIdBatch(List<String> ids);

    /**
     * 获取被该用户【直接、间接】管理的部门id
     * @param userId 用户id
     * @return
     */
    HashSet<String> getAllManageDeptIdSet(String userId);

    /**
     * 获取被改用户【直接】管理的部门
     * @param userId 用户id
     */
    List<DeptVo> getManageDeptList(String userId);

    /**
     * vo查用户信息（多个部门）
     * @param query UserQuery
     * @return
     */
    List<UserVo> getInfoListByQuery(UserQuery query);

    /**
     * 根据deptId获取该部门极其子部门下的所有用户id
     * @param deptId 部门id
     * @return
     */
    Set<String> getChildIdsByDeptId(String deptId);

    /**
     * 用户管理着几个会议，不包括已结束和审核不通过的
     */
    int countManageForConf(String userId);

    /**
     * 用户管理者几个部门
     */
    int countManageForDept(String userId);

    /**
     * 查被该用户创建（直接管理）的会议
     * @param userId 用户id
     * @return
     */
    List<ConfVo> getCreateConfList(String userId);

    /**
     * 获取用户的单位id
     * @param userId 用户id
     * @return
     */
    String getRid(String userId);


    /**
     * 返回用户参加的所有会议id
     * @param userId
     */
    List<String> getJoinConfIds(String userId);

    /**
     * 向部门中批量创建用户
     * 返回cardId重复的用户信息
     * @param deptId
     * @param data
     */
    List<AddUserVo> createUserBatch(String deptId, List<AddUserVo> data);
}
